package com.hwua.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.LinkedList;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.hwua.entity.Book;
import com.hwua.util.BookUtil;

public class ShowDetailServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html;charset=utf-8");
		PrintWriter out = resp.getWriter();
		String id = req.getParameter("id");//获取书的编号
		Book book = BookUtil.findBookById(id);
		out.write("浏览图书信息:"+book.toString());
		
		//拼接的id
		String linkid=linkID(id,req);
		//把拼接的id放到Cookie中传递给浏览
		Cookie cookie = new Cookie("histroyrecord",linkid);
		cookie.setPath("/");
		cookie.setMaxAge(Integer.MAX_VALUE);
		resp.addCookie(cookie);//把cookie存到客户端
		
		//告知浏览器2秒后发请求给showAllBooks
		resp.addHeader("refresh", "2;url="+req.getContextPath()+"/showAllBooks");
		
		
		
		
		
		
	}

	//拼接逻辑的方法
	private String linkID(String id, HttpServletRequest req) {
		//1.加入第一次访问访问图书列表，也就是说没有Cookie,那么直接返回id
		Cookie[] cookies = req.getCookies();
		if(cookies==null){
			return id;
		}
		
		//2.//存在的cookie,但没有名字histroyrecord的cookie
		Cookie historyCookie = null;
		for(Cookie cookie:cookies){
			if(cookie.getName().equals("histroyrecord")){
				historyCookie =cookie;
				break;
			}
		}
		
		if(historyCookie == null){
			return id;
		}
		
		//3.找到对应的cookie
		String value =historyCookie.getValue();//可能就是1，或者1-2-3
		/*拼接的情况
		 * 1.长度小于4，没有冲突的情况，直接放在头部，比如：1-2-3 ，访问4  ，结果：4-1-2-3
		 * 2.长度小于4，有冲突的情况，先删除存在的编号，再把编号添加到头部, 比如: 1-2-3 访问2 结果:2-1-3
		 * 3.长度等于4. 有冲突的情况，先删除存在的编号，再把编号添加到头部, 比如: 1-2-3-4 访问2 结果:2-1-3-4
		 * 4.长度等于4，没有冲突的情况，删除最后一个，把编号放到头部，比如：1-2-3-4 访问5 结果： 5-1-2-3
		 * 
		 */
		
		//把数组中转换成一个集合，再把集合放到LinkedList中
		LinkedList<String> list = new LinkedList<>(Arrays.asList(value.split("-")));
		if(list.size()<4){
			//代表冲突
			if(list.contains(id)){
				list.remove(id);//删除
			}
		}
		
		if(list.size()>=4){
			//代表冲突
			if(list.contains(id)){
				list.remove(id);//删除
			}else{
				list.removeLast();//删除最后一个
			}
		}
		
		//把编号放到头部
		list.addFirst(id);
		
		//拼接id字符串，比如 1-2-3-4
		StringBuilder sb = new StringBuilder();
		for(int i=0;i<list.size();i++){
			if(i>0){
				sb.append("-");
			}
			sb.append(list.get(i));
		}
		return sb.toString();
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}

}
